/**
 * indexOf() 方法返回数组中第一次出现给定元素的下标，如果不存在则返回 -1。
 * indexOf(searchElement)
 * 
 * 注：indexOf和includes的区别：
 * 
 * indexOf() 使用严格相等（与 === 运算符使用的算法相同）将 searchElement 与数组中的元素进行比较。NaN 值永远不会被比较为相等，因此当 searchElement 为 NaN 时 indexOf() 总是返回 -1。
 * indexOf() 方法会跳过稀疏数组中的空槽。
 * 
 * includes() 方法使用零值相等算法将 searchElement 与数组中的元素进行比较。0 值都被认为是相等的，不管符号是什么。（即 -0 等于 0），但 false 不被认为与 0 相同。NaN 可以被正确搜索到。
 * 当在稀疏数组上使用时，includes() 方法迭代空槽，就像它们的值是 undefined 一样。
 */
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));
// Expected output: 1

// Start from index 2
console.log(beasts.indexOf('bison', 2));
// Expected output: 4

console.log(beasts.indexOf('giraffe'));
// Expected output: -1


const arr = [NaN, 1, 2, 3]
arr[5] = 1
console.log(arr.indexOf(NaN)) //-1 严格相等
console.log(arr.includes(NaN)) // true

console.log(arr.indexOf(undefined)) //-1
console.log(arr.includes(undefined)) // true

console.log(arr.indexOf('1')) //-1
console.log(arr.includes('1')) // true